#include "SendConfigRequest.h"
#include <glib.h>
#include <stdio.h>
#include <cjson/cJSON.h>
#include "CurlRequestUtil.h"

size_t configWriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
    size_t realsize = size * nmemb;
    // 这里可以处理获取到的数据，比如存储到文件或者其他操作
    char * result = (char *)contents;

    // result就是url地址响应回来的一个信息，这个信息一般都是一个json格式的字符串
    // 所以这个地方要利用cJSONqu解析json字符串
    cJSON* root = cJSON_Parse(result);  // 将json字符串转成json对象
    if(root != NULL)
    {
        cJSON* successJson = cJSON_GetObjectItemCaseSensitive(root,"success");
        cJSON* codeJson = cJSON_GetObjectItemCaseSensitive(root,"code");
        cJSON* messageJson = cJSON_GetObjectItemCaseSensitive(root,"message");

        if(successJson->valueint == 1 && codeJson->valueint == 200)
        {
            printf("广告机信息注册成功！\n");
        }
        else{
            printf("广告机信息注册失败!原因=%s\n",messageJson->valuestring);
        }
    }

    printf("%s\n",result);
    return realsize;
}

// 向网关发起配置请求。向网关注册当前广告机信息
// 配置请求中的url，是不能写死的.切还要传参 需要传入sn location
// ip地址就不能写死，而是应该去读取当时写入到配置文件中的gatewayIP
// http://47.109.65.208/config.json?sn=xxxx&location=孵化园A号楼电梯
// 思考？ 三个参数网关ip location sn是在这个地方读取？还是在外面读取作为参数传过来
void sendConfigRequest(char** gatewayIp, char* sn){
    // 使用glib把数据保存到ini配置文件中
    // 改造一下，读取配置文件，获取设备文件路径
    GKeyFile *file = g_key_file_new();
    g_key_file_load_from_file(file,"../config/config.ini",G_KEY_FILE_NONE,NULL);
    gchar* path = g_key_file_get_string(file,"config","deviceInfoPath",NULL);


    GKeyFile *keyFile = g_key_file_new();
    g_key_file_load_from_file(keyFile,path,G_KEY_FILE_NONE,NULL);
    *gatewayIp = g_key_file_get_string(keyFile,"config","gatewayIp",NULL);
    char* location = g_key_file_get_string(keyFile,"config","location",NULL);

    g_key_file_free(keyFile);
    g_key_file_free(file);

    char* urlFormatStr = "http://%s/config.json?sn=%s&location=%s";
    char* url = (char*)calloc(1,100);

    // 构造url  
    sprintf(url,urlFormatStr,*gatewayIp,sn,location);
    printf("config url: %s\n",url);
    sendGetRequest(url,configWriteCallback);
}